home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / lemjoy.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-10-30  |  7.5 KB  |  302 lines

  1. 10  REM    ===START OF FILE===
  2. 20  REM ***************************
  3. 30  REM *          LEM           *
  4. 40  REM ***************************
  5. 50  REM
  6. 55  REM MODIFIED FOR JOY STICK   1/29/84
  7. 56  REM
  8. 60  SCREEN 1
  9. 70  COLOR 4,0
  10. 80  CLS
  11. 90  KEY OFF
  12. 100  LOCATE 2,7
  13. 110  PRINT "* * *  OUT ON A LEM  * * *"
  14. 120  LOCATE 5,1
  15. 130  PRINT "A challenging game of skill ..."
  16. 140  LOCATE 8,1
  17. 150  PRINT "Use your joy stick to run your"
  18. 160  PRINT "horizontal and vertal thrusters."
  19. 170  PRINT "You are to land the lunar excursion"
  20. 180  PRINT "module (LEM) as gently and accurately"
  21. 190  PRINT "as possible."
  22. 200  PRINT
  23. 210  PRINT
  24. 220  PRINT "WATCH YOUR FUEL SUPPLY!"
  25. 230  PRINT
  26. 240  PRINT
  27. 250  PRINT "If you have fuel left, the onboard"
  28. 260  PRINT "computer will -attempt- to return"
  29. 270  PRINT "you to earth..."
  30. 280  REM
  31. 290  LOCATE 25,9
  32. 300  PRINT "PRESS ANY KEY TO BEGIN";
  33. 310  REM
  34. 320  REM  STARTING POINT FOR EACH LANDING ATTEMPT
  35. 330  IF LEN(INKEY$) THEN 330
  36. 340  ON STRIG(0) GOSUB 390
  37. 350  STRIG(0) ON
  38. 360  K$ = INKEY$
  39. 370  IF K$ = "" THEN 360
  40. 380  REM
  41. 390  COLOR 0,1
  42. 400  CLS
  43. 410  REM  A DIFFERENT GAME EACH SECOND OF THE HOUR
  44. 420  T$ = MID$(TIME$ ,4,2) + MID$(TIME$ ,7)
  45. 430  RANDOMIZE VAL(T$)
  46. 440  REM
  47. 450  REM   BUILD THE SPACE SHIP IMAGE
  48. 460  LINE (3,1) - (5,5),2,BF
  49. 470  LINE (2,2) - (6,4),2,BF
  50. 480  LINE (1,7) - (2,6),3
  51. 490  LINE (6,6) - (7,7),3
  52. 500  DIM SHIP(7)
  53. 510  GET (0,0) - (8,8),SHIP
  54. 520  REM
  55. 530  REM   BUILD VERTICAL EXHAUST IMAGE
  56. 540  LINE (9,1) - (11,1)
  57. 550  DIM EXHAUSTX(1)
  58. 560  GET (9,1) - (11,1),EXHAUSTX
  59. 570  REM
  60. 580  REM   BUILD HORIZONTAL EXHAUST IMAGE
  61. 590  LINE (1,9) - (1,12)
  62. 600  DIM EXHAUSTY(1)
  63. 610  GET (1,9) - (1,12),EXHAUSTY
  64. 620  REM
  65. 630  REM      SPRINKLE A FEW STARS AROUND
  66. 640  CLS
  67. 650  FOR I = 1 TO 300
  68. 660    PSET(320 * RND ,200 * RND)
  69. 670  NEXT I
  70. 680  REM
  71. 690  REM   DRAW THE EARTH
  72. 700  CIRCLE (277,63),25,1
  73. 710  PAINT (277,63),1
  74. 720  DRAW "c3bm272,42r7d1r4l13d1l4r22d1l24g1r23l3d1l20"
  75. 730  DRAW "r3d1r14l4d1l8c2l3u1l1d2r18e3l1g1l2f1l5d2r4"
  76. 740  DRAW "l16d1r14d1l15d1r14g1l13d1r13g1l13"
  77. 750  DRAW "d1r13f2l1h3l3g1l8d1r6g1l4f1r3f1l3f1r6u2l1d1l1"
  78. 760  DRAW "d2l3r5d1r1g1r13l2u1l7e1r3d3r7l15f1r15f1l16"
  79. 770  DRAW "g1r21d1l21f1r20g1l18f1r17g1l15"
  80. 780  DRAW "f1r13d1l13d1r11d1l11d1r9g1l7g1r6g1l4d1r2l5"
  81. 790  DRAW "bm273,54c1u1e1r1f2"
  82. 800  DRAW "c3bd2l2bl2bu1l2h1l1bd4l3h1l3h1l2h1l1"
  83. 810  DRAW "bg5r1f2r1f1r5u1l3"
  84. 820  DRAW "bm273,79r1f1d1l3h1l1h2u2e3r2e1r9l3h1l4"
  85. 830  DRAW "bh2e1r4e1r7l3e2r1"
  86. 840  REM
  87. 850  REM  CHOOSE SITE FOR LANDING PAD
  88. 860  XL = 140 + 50 * RND
  89. 870  YL = 180 - 10 * RND
  90. 880  REM
  91. 890  REM   CREATE TOPOGRAPHICAL FEATURES OF MOON
  92. 900  M1 = M2
  93. 910  M2 = M1 + 37 * RND
  94. 920  IF M2 > 319 THEN M2 = 319
  95. 930  H1 = H2
  96. 940  H2 = 190 - 70 * RND
  97. 950  IF H1 = 0 THEN 930
  98. 960  IF M2 < XL - 39 THEN 990
  99. 970  IF M2 > XL + 39 THEN 990
  100. 980  H2 = YL
  101. 990  LINE (M1,H1) - (M2,H2),1
  102. 1000  IF M2 < 319 THEN 900
  103. 1010  PAINT (0,199),3,1
  104. 1020  REM
  105. 1030  REM   DRAW THE LANDING PAD
  106. 1040  LINE (XL - 3,YL) - (XL + 3,YL + 2),1,BF
  107. 1050  REM
  108. 1060  REM   SLIGHTLY RANDOM STARTING LOCATION FOR SHIP
  109. 1070  SHIPX = 50 * RND
  110. 1080  SHIPY = 20 * RND
  111. 1090  REM
  112. 1100  REM    SLIGHTLY RANDOM STARTING VELOCITY FOR SHIP
  113. 1110  VELX = 7 + RND * 3
  114. 1120  VELY = 1 + RND
  115. 1130  REM
  116. 1140  REM  STARTING CONDITIONS
  117. 1150  PUT (SHIPX,SHIPY),SHIP, XOR
  118. 1160  FACTOR = 0.1
  119. 1170  FUEL = 999
  120. 1180  THRUSTUP = 3
  121. 1190  REM
  122. 1200  REM  MAIN FLIGHT LOOP STARTS HERE
  123. 1210  REM
  124. 1220  REM  SAMPLE JOY STICK
  125. 1230  REM
  126. 1240  HORZ = STICK(0)
  127. 1241  VERT = STICK(1)
  128. 1250  IF FLAG.F1 = 0 AND HORZ > 150 THEN GOSUB 2000 : FLAG.F1 = 1
  129. 1260  IF FLAG.F1 = 1 AND HORZ > 25 AND HORZ < 150 THEN GOSUB 2000 : FLAG.F1 = 0
  130. 1270  IF FLAG.F2 = 0 AND HORZ < 25 THEN GOSUB 2040 : FLAG.F2 = 1
  131. 1280  IF FLAG.F2 = 1 AND HORZ > 25 AND HORZ < 150 THEN GOSUB 2040 : FLAG.F2 = 0
  132. 1285  IF FLAG.F3 = 1 AND FUEL = 0 THEN GOSUB 2080 : FLAG.F3 = 0 : ELSE IF FLAG.F3 = 0 AND FUEL = 0 THEN 1310
  133. 1290  IF FLAG.F3 = 0 AND VERT < 25 THEN GOSUB 2080 : FLAG.F3 = 1
  134. 1300  IF FLAG.F3 = 1 AND VERT > 25 AND VERT < 150 THEN GOSUB 2080 : FLAG.F3 = 0
  135. 1310  PULSE = PULSE MOD 7 + 1
  136. 1320  IF PULSE = 1 THEN SOUND 1200 - FUEL / 5,1
  137. 1330  IF THRUSTUP < 0 THEN FUEL = FUEL - 9.7
  138. 1340  IF THRUSTSIDE THEN FUEL = FUEL - 5.3
  139. 1350  IF FUEL < 0 THEN FUEL = 0 : STRIG(0) OFF
  140. 1360  IF FUEL > 99 THEN 1460
  141. 1370  SOUND 99,0
  142. 1380  IF FUEL > 0 THEN SOUND 400,1
  143. 1390  IF FUEL > 0 THEN 1460
  144. 1400  REM
  145. 1410  REM   NO MORE FUEL LEFT, DISENGAGE ENGINES
  146. 1420  SOUND 2000,1
  147. 1430  THRUSTSIDE = 0
  148. 1440  REM
  149. 1450  REM   COMPUTE NEW VELOCITIES AND POSITIONS
  150. 1460  VELX = VELX + FACTOR * THRUSTSIDE * 3
  151. 1470  OLDX = SHIPX
  152. 1480  SHIPX = SHIPX + FACTOR * VELX * 3
  153. 1490  VELY = VELY + FACTOR * THRUSTUP
  154. 1500  OLDY = SHIPY
  155. 1510  SHIPY = SHIPY + FACTOR * VELY
  156. 1520  REM
  157. 1530  REM  PUT EXHAUST IMAGES IN VIEW IF NECESSARY
  158. 1540  IF THRUSTSIDE < 0 THEN PUT (SHIPX + 7,SHIPY + 3),EXHAUSTX, XOR : FLGL = 1
  159. 1550  IF THRUSTSIDE > 0 THEN PUT (SHIPX - 2,SHIPY + 3),EXHAUSTX, XOR : FLGR = 1
  160. 1560  IF THRUSTUP < 0 THEN PUT (SHIPX + 4,SHIPY + 7),EXHAUSTY, XOR : FLGU = 1
  161. 1570  REM
  162. 1580  REM   HAVE WE DRIFTED OFF SCREEN ?
  163. 1590  IF SHIPY < 0 THEN 1910
  164. 1600  IF SHIPX < 2 THEN 1910
  165. 1610  IF SHIPX > 308 THEN 1910
  166. 1620  REM
  167. 1630  REM   ERASE OLD SHIP IMAGE VIA XOR TO PRESERVE BACKGROUND
  168. 1640  PUT (OLDX,OLDY),SHIP, XOR
  169. 1650  REM
  170. 1660  REM    DRAW NEW SHIP IMAGE, XOR ONTO BACKGROUND
  171. 1670  PUT (SHIPX,SHIPY),SHIP, XOR
  172. 1680  REM
  173. 1690  REM   ERASE THE EXHAUST IMAGES IF NECESSARY
  174. 1700  IF FLGL THEN PUT (SHIPX + 7,SHIPY + 3),EXHAUSTX, XOR : FLGL = 0
  175. 1710  IF FLGR THEN PUT (SHIPX - 2,SHIPY + 3),EXHAUSTX, XOR : FLGR = 0
  176. 1720  IF FLGU THEN PUT (SHIPX + 4,SHIPY + 7),EXHAUSTY, XOR : FLGU = 0
  177. 1730  REM
  178. 1740  REM    SKIP LANDING CHECK FOR AWHILE IF RETURNING TO EARTH
  179. 1750  IF LAND < = 0 THEN 1800
  180. 1760  LAND = LAND - 0.07
  181. 1770  GOTO 1840
  182. 1780  REM
  183. 1790  REM   ARE LANDING PADS TOUCHING THE MOON (AND NOT THE EARTH)?
  184. 1800  IF POINT(SHIPX,SHIPY + 8) = 1 AND SHIPY > 85 THEN 2120
  185. 1810  IF POINT(SHIPX + 8,SHIPY + 8) = 1 AND SHIPY > 85 THEN 2120
  186. 1820  REM
  187. 1830  REM   UPDATE THE FUEL SUPPLY
  188. 1840  LOCATE 25,16
  189. 1850  PRINT USING "FUEL ###";FUEL;
  190. 1860  REM
  191. 1870  REM   KEEP ON FLYING
  192. 1880  GOTO 1240
  193. 1890  REM
  194. 1900  REM   WE JUST DRIFTED OFF SCREEN
  195. 1910  COLOR 4,1
  196. 1920  LOCATE 12,4
  197. 1930  IF LAND = 0 THEN PRINT "MISSION ABORTED, RETURN TO EARTH"
  198. 1940  IF LAND < > 0 THEN PRINT "       WELCOME HOME HERO!"
  199. 1950  FOR A = 1 TO 1000
  200. 1960  NEXT
  201. 1970  RUN 330
  202. 1980  REM
  203. 1990  REM    SUBROUTINE ... LEFT ENGINE CONTROL
  204. 2000  THRUSTSIDE = - (THRUSTSIDE < > 1)
  205. 2010  RETURN
  206. 2020  REM
  207. 2030  REM   SUBROUTINE ... RIGHT ENGINE CONTROL
  208. 2040  THRUSTSIDE = (THRUSTSIDE < > - 1)
  209. 2050  RETURN
  210. 2060  REM
  211. 2070  REM    SUBROUTINE ... VERTICAL ENGINE CONTROL
  212. 2080  THRUSTUP = 7 * (THRUSTUP = 3) - 3 * (THRUSTUP = - 7)
  213. 2090  RETURN
  214. 2100  REM
  215. 2110  REM   WE LANDED... BUT HOW DID WE FARE?
  216. 2120  LOCATE 1,1
  217. 2130  VEL = ABS(VELX) + ABS(VELY)
  218. 2140  IF VEL < 4 THEN 2350
  219. 2150  REM
  220. 2160  PRESET(SHIPX + 4,SHIPY + 8)
  221. 2170  FOR I = 1 TO VEL * 0.7
  222. 2180    DELX = 9 * VEL * RND(- 0.5)
  223. 2190    DELY = 7 * VEL * (- RND)
  224. 2200    DRAW "C2 NM+=DELX;,=DELY;"
  225. 2210  NEXT I
  226. 2220  REM
  227. 2230  REM   FAST ENOUGH TO DIG NEW CRATER?
  228. 2240  IF VEL < 8 THEN 2300
  229. 2250  PRT$ = "NEW CRATER IS #### METERS WIDE..."
  230. 2260  PRINT USING PRT$;VEL * VEL / 7
  231. 2270  GOTO 2770
  232. 2280  REM
  233. 2290  REM    LANDING WAS TOO ROUGH, SORRY
  234. 2300  PRINT "DAMAGED BEYOND REPAIR ...                        "
  235. 2310  PRINT "ENJOY YOUR STAY !!!         ";
  236. 2320  GOTO 2770
  237. 2330  REM
  238. 2340  REM   LANDED OK, JUST HOW WELL DID YOU DO?
  239. 2350  IF VEL < 3 THEN 2390
  240. 2360  PRINT "FAIRLY SOFT LANDING ... "
  241. 2370  GOTO 2570
  242. 2380  REM
  243. 2390  IF VEL < 2 THEN 2420
  244. 2400  PRINT "NICE JOB !!  ";
  245. 2410  GOTO 2570
  246. 2420  REM
  247. 2430  IF VEL < 1 THEN 2460
  248. 2440  PRINT "EXCELLENT SOFT LANDING !!!!!";
  249. 2450  GOTO 2570
  250. 2460  REM
  251. 2470  IF SHIPX - XL + 4 < 3 THEN 2510
  252. 2480  PRINT "SUPERIOR LANDING JOB !!!!!!!!!";
  253. 2490  GOTO 2570
  254. 2500  REM
  255. 2510  PRINT "THE PRESIDENT CALLS WITH HIS";
  256. 2520  LOCATE 2,1
  257. 2530  PRINT "CONGRATULATIONS ON A SUPERB LANDING!";
  258. 2540  GOTO 2730
  259. 2550  REM
  260. 2560  REM  OKAY, SO HOW CLOSE TO THE LANDING PAD ARE YOU?
  261. 2570  DIS = ABS(SHIPX - XL + 4) + ABS(SHIPY - YL + 8)
  262. 2580  LOCATE 2,1
  263. 2590  IF DIS < 50 THEN 2630
  264. 2600  PRINT "BUT YOU ARE WAY OUT IN THE BOONIES !";
  265. 2610  GOTO 2730
  266. 2620  REM
  267. 2630  IF DIS < 10 THEN 2670
  268. 2640  PRINT "BUT YOU MISSED THE LANDING SITE!";
  269. 2650  GOTO 2730
  270. 2660  REM
  271. 2670  IF DIS < 3 THEN 2710
  272. 2680  PRINT USING "BUT YOU MISSED THE SPOT BY ## METERS.";DIS
  273. 2690  GOTO 2730
  274. 2700  REM
  275. 2710  PRINT "AND YOU LANDED RIGHT ON TARGET!!";
  276. 2720  REM
  277. 2730  FOR A = 1 TO 4000
  278. 2740  NEXT
  279. 2750  GOTO 2810
  280. 2760  REM
  281. 2770  FOR A = 1 TO 1000
  282. 2780  NEXT
  283. 2790  REM
  284. 2800  REM   SHALL WE RETURN TO EARTH
  285. 2810  IF (FUEL < > 0) AND (VEL < 4) THEN 2820 ELSE RUN 330
  286. 2820  LOCATE 1,1
  287. 2830  PRINT "EARTH CALLING --- RETURN HOME                    ";
  288. 2840  LOCATE 2,1
  289. 2850  PRINT "                                                 ";
  290. 2860  VELX = 0
  291. 2870  VELY = - 1
  292. 2880  LAND = 1
  293. 2890  THRUSTUP = - 7
  294. 2900  THRUSTSIDE = 0
  295. 2910  FOR Z = 1 TO 2000
  296. 2920  NEXT Z
  297. 2930  LOCATE 1,1
  298. 2940  PRINT "LEM COMPUTER ENGAGED - RETURNING HOME            ";
  299. 2950  IF LEN(INKEY$) THEN 2950
  300. 2960  GOTO 1240
  301. 2970  REM   ===END OF FILE===
  302.